assume cs:code, ds:data, ss:stack

data segment
    db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983'
    db '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992'
    db '1993', '1994', '1995'
    ; 以上表示 21 年的 21 个字符串

    dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
    dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000
    ; 以上是表示 21 年公司收入的 21 个 dword 型数据

    dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226
    dw 11542, 14430, 15257, 17800
    ; 以上是表示 21 年公司雇员人数的 21 个 word 型数据
data ends

stack segment
    dw 10 dup(0)
stack ends

table segment
    db 21 dup ('year summ ne ?? ')
table ends

code segment
    start:
        ; 堆栈段准备
        mov ax, stack
        mov ss, ax
        mov sp, 14h

        ; 用 si 遍历要填充的数据
        mov si, 00h

        ; 年份
        ; 设置计数器
        mov cx, 15h
        mov bx, 00h
        s0:
            mov di, 00h
            ; 数据段准备
            mov ax, data
            mov ds, ax
            push [si]
            ; 数据段准备
            mov ax, table
            mov ds, ax
            pop [bx].0[di]
            add di, 02h
            add si, 02h
            ; 数据段准备
            mov ax, data
            mov ds, ax
            push [si]
            ; 数据段准备
            mov ax, table
            mov ds, ax
            pop [bx].0[di]
            add di, 02h
            add si, 02h
            ; 空格
            mov byte ptr [bx].0[di], ' '
            add bx, 10h
            loop s0

        ; 收入
        ; 设置计数器
        mov cx, 15h
        mov bx, 00h
        s1:
            mov di, 00h
            ; 数据段准备
            mov ax, data
            mov ds, ax
            push [si]
            ; 数据段准备
            mov ax, table
            mov ds, ax
            pop [bx].5[di]
            add di, 02h
            add si, 02h
            ; 数据段准备
            mov ax, data
            mov ds, ax
            push [si]
            ; 数据段准备
            mov ax, table
            mov ds, ax
            pop [bx].5[di]
            add di, 02h
            add si, 02h
            ; 空格
            mov byte ptr [bx].5[di], ' '
            add bx, 10h
            loop s1

        ; 雇员数
        ; 设置计数器
        mov cx, 15h
        mov bx, 00h
        s2:
            mov di, 00h
            ; 数据段准备
            mov ax, data
            mov ds, ax
            push [si]
            ; 数据段准备
            mov ax, table
            mov ds, ax
            pop [bx].0ah[di]
            add di, 02h
            add si, 02h
            ; 空格
            mov byte ptr [bx].0ah[di], ' '
            add bx, 10h
            loop s2

        ; 人均收入
        ; 设置计数器
        mov cx, 15h
        mov bx, 00h
        s3:
            mov ax, [bx].05h
            mov dx, [bx].07h
            div word ptr [bx].0ah
            mov [bx].0dh, ax
            ; 空格
            mov byte ptr [bx].0fh, ' '
            add bx, 10h
            loop s3

        mov ax, 4100h
        int 21h
code ends
end start